package com.x.redis.dao.impl;

import java.io.Serializable;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;

import com.x.redis.dao.UserDao;
import com.x.redis.obj.User;

public class UserDaoImpl implements UserDao {

    @Autowired
    protected RedisTemplate<Serializable, Serializable> redisTemplate;
    
    

    public void saveUser(final User user) {
        redisTemplate.execute(new RedisCallback<Object>() {

            @Override
            public Object doInRedis(RedisConnection connection) throws DataAccessException {
                connection.set(redisTemplate.getStringSerializer().serialize("user.uid." + user.getId()),
                               redisTemplate.getStringSerializer().serialize(user.getName()));
                return null;
            }
        });
        
    }

    @Override
    public User getUser(final long id) {
        return redisTemplate.execute(new RedisCallback<User>() {
            @Override
            public User doInRedis(RedisConnection connection) throws DataAccessException {
                byte[] key = redisTemplate.getStringSerializer().serialize("user.uid." + id);
                if (connection.exists(key)) {
                    byte[] value = connection.get(key);
                    String name = redisTemplate.getStringSerializer().deserialize(value);
                    User user = new User();
                    user.setName(name);
                    user.setId(id);
                    return user;
                    
                }
                return null;
            }
        });
    }
//    /** 
//     * 压栈 
//     *  
//     * @param key 
//     * @param value 
//     * @return 
//     */  
//    public Long push(String key, String value) {  
//        return redisTemplate.opsForList().leftPush(key, value);  
//    }  
//  
//    /** 
//     * 出栈 
//     *  
//     * @param key 
//     * @return 
//     */  
//    public String pop(String key) {  
//        return (String) redisTemplate.opsForList().leftPop(key);  
//    }  
//  
//    /** 
//     * 入队 
//     *  
//     * @param key 
//     * @param value 
//     * @return 
//     */  
//    public Long in(String key, String value) {  
//        return redisTemplate.opsForList().rightPush(key, value);  
//    }  
//  
//    /** 
//     * 出队 
//     *  
//     * @param key 
//     * @return 
//     */  
//    public String out(String key) {  
//        return (String) redisTemplate.opsForList().leftPop(key);  
//    }  
//  
//    /** 
//     * 栈/队列长 
//     *  
//     * @param key 
//     * @return 
//     */  
//    public Long length(String key) {  
//        return redisTemplate.opsForList().size(key);  
//    }  
//  
//    /** 
//     * 范围检索 
//     *  
//     * @param key 
//     * @param start 
//     * @param end 
//     * @return 
//     */  
//    public List<Serializable> range(String key, int start, int end) {  
//        return redisTemplate.opsForList().range(key, start, end);  
//    }  
//  
//    /** 
//     * 移除 
//     *  
//     * @param key 
//     * @param i 
//     * @param value 
//     */  
//    public void remove(String key, long i, String value) {  
//        redisTemplate.opsForList().remove(key, i, value);  
//    }  
//  
//    /** 
//     * 检索 
//     *  
//     * @param key 
//     * @param index 
//     * @return 
//     */  
//    public String index(String key, long index) {  
//        return (String) redisTemplate.opsForList().index(key, index);  
//    }  
//  
//    /** 
//     * 置值 
//     *  
//     * @param key 
//     * @param index 
//     * @param value 
//     */  
//    public void set(String key, long index, String value) {  
//        redisTemplate.opsForList().set(key, index, value);  
//    }  
//  
//    /** 
//     * 裁剪 
//     *  
//     * @param key 
//     * @param start 
//     * @param end 
//     */  
//    public void trim(String key, long start, int end) {  
//        redisTemplate.opsForList().trim(key, start, end);  
//    }  

}